<?php
/**
* 사이트 어플리케이션 파일
* 2013-02-04, $this->_url_logic 실행로직 URL 변수. set_logic() 함수 추가
*
* @filename application.php
* @since 2008-05-06
* @update 2013-02-04
* @version 1.4.0
* @author kimsb <ksb1110@nextez.co.kr>
**/
if (!class_exists('Application'))
{
	define('POST', 0x01, true);
	define('GET', 0x02, true);
	define('BOTH', 0x03, true);

	class Application
	{
		/**
		* 사이트정보
		*/
		var $_site_name;
		var $_site_domain;
		var $_dir_root;

		/**
		* 데이타 베이스 접근 정보
		*/
		var $_db_host;
		var $_db_name;
		var $_db_user;
		var $_db_pass;

		/**
		* 디렉토리 정보
		*/
		var $_dir_admin;
		var $_dir_board;
		var $_dir_data;
		var $_dir_html;
		var $_dir_frame;
		var $_dir_lib;
		var $_dir_sub;
		var $_dir_template;
		var $_dir_ezmail;
		var $_dir_site;
		/**
		* URL 정보
		*/
		var $_url_root;
		var $_url_admin;
		var $_url_board;
		var $_url_data;
		var $_url_sub;
		var $_url_template;
		var $_url_images;
		var $_url_ezmail;
		var $_url_logic;
		var $_url_site;

		/**
		* 보안서버 적용 플래그
		*/
		var $_security;

		/**
		* 세션적용 도메인
		*/
		var $_session_domain;

		/**
		* 이전 에러핸들러 정보
		* @var string
		*/
		var $_old_error_handler;

		/**
		* @var boolean $_debug 디버그 모드
		*/
		var $_debug;

		/**
		* @var string $_error_page Error Page
		*/
		var $_error_page;

		/**
		* @var array $_error_frame
		**/
		var $_error_frame;

		/** 관리자 메일 **/
		var $_admin_email;

		/** SMTP IP **/
		var $_smtp_host;

		/** is_send_process_mail 프로세스 결과 메일 전송 여부 **/
		var $_send_process_mail;
		/** is_send_process_sms 프로세스 결과 SMS 전송 여부 **/
		var $_send_process_sms;

		/**
		* PHP 5 Constructor
		*/
		function __construct()
		{
			$this->_site_name	= "AMNOTE 관리자";
			$this->_admin_email = 'ksb1110@nextez.co.kr'; // 수정!!
			$this->_admin_sms = '000-000-0000';			  // 수정!!
			$this->_site_domain	= $_SERVER['HTTP_HOST'];  // 사이트 도메인
			$this->_dir_root	= "/"; // 임시 포탈 루트 디렉토리

			$this->_db_host		= 'localhost:3307';
			$this->_db_user		= 'accountmanager';
			$this->_db_pass		= 'accountmanager1001';
			$this->_db_name		= 'accountmanager_db';

			$this->_session_domain = "vn.amnote.com";
			$this->_session_name	= strtoupper(substr($this->_site_domain, 0, strpos($this->_site_domain, '.'))) . '_CONFERENCE';


			$this->_dir_root		= str_replace("/site","",$_SERVER['DOCUMENT_ROOT']);
			$this->_dir_admin		= $this->_dir_root . '/ezadm';
			$this->_dir_data		= $this->_dir_root . '/data';
			$this->_dir_html		= $this->_dir_root . '/htmls';
			$this->_dir_frame		= $this->_dir_root . '/frame';
			$this->_dir_lib			= $this->_dir_root . '/lib';
			$this->_dir_sub			= $this->_dir_root . '/contents';
			$this->_dir_board		= $this->_dir_root . '/ezbbs';
			$this->_dir_template	= $this->_dir_root . '/template';
			$this->_dir_site		= $this->_dir_root . '/site';

			$this->_url_root		= 'http://' . $_SERVER['HTTP_HOST'];
			$this->_url_ssl_root	= 'https://' . $_SERVER['HTTP_HOST'];
			$this->_url_admin		= '/ezadm';
			$this->_url_board		= '/ezbbs';
			$this->_url_data		= $this->_site_domain.'/data';
			$this->_url_sub			= '/contents';
			$this->_url_template	= '/template';
			$this->_url_images		= '/images';
			$this->_url_logic		= "";
			$this->_url_site		= "/site";

			$this->_smtp_host       = "14.63.218.44";

			$this->_debug			= false;
			$this->_security		= false;
			$this->_session_domain	= $this->_site_domain;
			$this->_send_process_mail = true;
			$this->_send_process_sms = true;
			//$this->_old_error_handler = set_error_handler(array(&$this, '_error_handler'));
			error_reporting(E_ALL & ~E_NOTICE);
			// error_reporting(E_ALL);
			//E_ERROR  E_WARNING  E_NOTICE  E_CORE_WARNING  E_COMPILE_WARNING  E_USER_ERROR  E_USER_WARNING  E_USER_NOTICE  E_ALL  E_STRICT

			$this->_error_page = $this->_dir_root . '/error/default.htm';
			$this->_error_frame = array(
				'html_header' => '/html_header/blank.htm',
				'html_footer' => '/html_footer/blank.htm',
			);
		}

		/**
		* PHP4 Construct
		**/
		function Application()
		{
			$this->__construct();
		}

		/**
		* 배열파일를 로드한다.
		* @param string $file_path 파일경로
		* @param string $var_name 변수명
		* @return array 로드에 성공하면 배열파일, 배열파일이 없으면 FALSE
		* @version 1.0.0
		**/
		function array_file_require($file_path, $var_name='')
		{
			$full_file_path = $this->_dir_lib . '/include/' . $file_path . '.php';
			if (is_file($full_file_path))
			{
				require $full_file_path;
				if (!$var_name)
				{
					$tmp_var = split('\.', basename($file_path));
					$var_name = 'g_' . $tmp_var[count($tmp_var)-1];
				}

				return ${$var_name};
			}
			return false;
		}

		/**
		* 라이브러리를 로드한다.
		* @param string $class_name 클래스명
		* @version 1.0.0
		**/
		function class_require($class_name)
		{
			$class_path = $this->_dir_lib . '/class.'. $class_name . ".php";
			if (file_exists($class_path)) require_once $class_path;
			else die($this->error(NOT_FIND_CLASS_FILE) . '<br>' . $class_name);
		}

		/**
		* Method 체크
		* @param integer $check_type 체크형태
		* @return boolean 허용이면 TRUE, 허용하지 않으면 FALSE
		* @version 1.0.0
		**/
		function check_method($check_type=BOTH)
		{
			if (isset($_SERVER['REQUEST_METHOD']))
			{
				if ($_SERVER['REQUEST_METHOD'] == 'GET')
					return $check_type & GET;
				else if ($_SERVER['REQUEST_METHOD'] == 'POST')
					return $check_type & POST;
			}
			return false;
		}

		/**
		* 프로그램 로직 처리시 디버그 모드로 실행
		* @version 1.0.0
		**/
		function debug() { $this->_debug = true; }

		/**
		* 에러를 출력한다.
		* @param string $error 에러
		* @param string $lang 언어
		* @return strong 에러코드
		* @version 1.0.0
		**/
		function error($error, $lang='kor')
		{
			$error_path = $this->_dir_lib . "/message/inc.error_message.{$lang}.php";
			if (file_exists($error_path))
			{
				include $error_path;
				if (array_key_exists($error, $g_error_messages)) return $g_error_messages[$error];
			}
			else return $error;
		}

		/**
		* 넘겨진 변수명에 해당하는 디렉토리 경로를 반환한다. 이때 $is_full 이 TRUE이면 전체경로를 반환합니다.
		* @param string $var 변수명
		* @param boolean $is_full TRUE이면 전체경로 반환
		* @return string 디렉토리 경로
		* @version 1.1.0
		*/
		function get_dir($var, $is_full=true)
		{
			$path = '';
			if (isset($this->{'_dir_'.$var}))
			{
				$path = $this->{'_dir_'.$var};
				if (!$is_full) $path = str_replace($this->_dir_root, '', $path);
			}

			return $path;
		}

		/**
		* 파일명의 아이콘 이미지 태그 반환
		* @param string $filename 파일명
		* @param string $tip 이미지의 alt
		* @return string 이미지 태그
		* @version 1.3.0
		*/
		function icon($filename, $tip='')
		{
			if (!$filename) return "";

			$exts = array('bmp', 'gif', 'hwp', 'jpg', 'pdf', 'ppt', 'word', 'xls');
			$ext = strtolower(substr(strrchr($filename, "."), 1, 3));
			if ($ext == 'doc') $ext = 'word';
			if (!in_array($ext, $exts)) $ext = 'etc';

			return "<img src=\"/icon/icon_{$ext}.gif\" alt=\"{$tip}\" />";
		}

		/**
		* 키워드 문구 강조
		* @param string $keyword 키워드
		* @param string $string 문자열
		* @return string $string 내 $keyword의 강조태그 삽입된 문자열
		* @version 1.3.0
		*/
		function keyword($keyword, $string)
		{
			return str_replace("{$keyword}", "<span class='keyword'>{$keyword}</span>", $string);
		}

		/**
		* 변수가 설정되어 있으면 그 값을 반환하고, 없으면 초기값을 반환한다.
		* @param string $name 변수명
		* @param mixed $default 기본값
		* @param integer $index 인덱스, 변수형태가 배열이거나 객체인경우..
		* @return mixed 설정된 값
		* @version 1.0.0
		**/
		function nvl($name, $default='', $index=null)
		{
			if (is_null($index) && isset($GLOBALS[$name])) $default = $GLOBALS[$name];
			else if (!is_null($index) && isset($GLOBALS[$name]) && is_array($GLOBALS[$name])) $default = $GLOBALS[$name];
			else if (($_SERVER['REQUEST_METHOD'] == 'POST') && isset($_POST[$name])) $default = trim($_POST[$name]);
			else if (($_SERVER['REQUEST_METHOD'] == 'GET') && isset($_GET[$name])) $default = trim($_GET[$name]);

			if (is_array($default) && !is_null($index)) $default = $default[$index];
			else if (is_object($default) && !is_null($index)) $default = $default->$index;
			else if (is_string($default)) $default = trim($default);

			return $default;
		}

		/** page goto **/
		function page_goto()
		{
			$this->class_require('JavaScript');
			$Script = new JavaScript();

			$args = func_get_args();
			$url = $_SERVER['PHP_SELF'];

			if (count($args))
			{
				$url .= '?';
				if ($args[0]) $url .= "&g_job=" . $args[0];
				if ($args[1]) $url .= "&g_subjob=" . $args[1];
				// 인수가 0 부터 시작인데 1부터 시작이라서 수정함... 2011-01-07 by shin
				/*if ($args[1]) $url .= "&g_job=" . $args[1];
				if ($args[2]) $url .= "&g_subjob=" . $args[2];*/

				//if(count($args) > 2)
				//{
					if ($_SERVER['REQUEST_METHOD'] == 'GET') $url .= "&g_params=" . urlencode($_GET['g_params']);
					else if ($_SERVER['REQUEST_METHOD'] == 'POST') $url .= "&g_params=" . urlencode($_POST['g_params']);

					$idx = 1;
					for ($i=2; $i<count($args); $i++)
						$url .= "&id" . $idx++ . "=" . $args[$i];
				//}
			}

			$Script->reload('parent.opener', false);
			$Script->location($url, 'parent');
		}

		function page_goto_ucc()
		{
			$this->class_require('JavaScript');
			$Script = new JavaScript();

			$args = func_get_args();
			$url = $_SERVER['PHP_SELF'];

			if (count($args))
			{
				$url .= '?';
				if ($args[0]) $url .= "&g_job=" . $args[0];
				if ($args[1]) $url .= "&g_subjob=" . $args[1];

				if ($_SERVER['REQUEST_METHOD'] == 'GET') $url .= "&g_params=" . urlencode($_GET['g_params']);
				else if ($_SERVER['REQUEST_METHOD'] == 'POST') $url .= "&g_params=" . urlencode($_POST['g_params']);

				$idx = 1;
				for ($i=2; $i<count($args); $i++)
					$url .= "&id" . $idx++ . "=" . $args[$i];
			}
			$Script->location($url, 'parent');
		}

		/** page reload **/
		function reload($is_open=false)
		{
			$this->class_require('JavaScript');
			$Script = new JavaScript();

			if ($is_open) $Script->reload('parent.opener');
			$Script->reload('parent');
		}

		/** page goto **/
		function page_goto_reload()
		{
			$this->class_require('JavaScript');
			$Script = new JavaScript();

			$args = func_get_args();
			$url = $_SERVER['PHP_SELF'];

			if (count($args))
			{
				$url .= '?';
				if ($args[0]) $url .= "&g_job=" . $args[0];
				if ($args[1]) $url .= "&g_subjob=" . $args[1];

				if ($_SERVER['REQUEST_METHOD'] == 'GET') $url .= "&g_params=" . urlencode($_GET['g_params']);
				else if ($_SERVER['REQUEST_METHOD'] == 'POST') $url .= "&g_params=" . urlencode($_POST['g_params']);

				$idx = 1;
				for ($i=2; $i<count($args); $i++)
					$url .= "&id" . $idx++ . "=" . $args[$i];
			}

			$Script->location($url, 'parent');
		}


		/**
		* 실행로직 URL을 설정합니다.
		* @param string $path 실행로직 full 경로
		* @version 1.4.0
		*/
		function set_logic($path)
		{
			$this->_url_logic = str_replace($this->_dir_root, "", $path);
		}

		/**
		* 데이타의 이미지 src를 반환합니다. 넘겨진 이미지 경로가 없는경우 기본이미지를 반환합니다.
		* @param string $path 이미지 서브 경로
		* @param boolean $check_thumbnail 섬네일 이미지 체크여부. TURE이면 섬네일 이미지 체크
		* @param string  $defimg 기본이미지 파일명
		* @return string 이미지 src
		* @version 1.3.0
		*/
		function src($path, $check_thumbnail=true, $defimg="default.gif")
		{
			if ($path && $check_thumbnail)
			{
				$fullpath = $this->_dir_data . $path;
				$pathinfo = pathinfo($fullpath);
				$thumbpath = $pathinfo['dirname'] . '/' . $pathinfo['filename'] . '_thumb.' . $pathinfo['extension'];
				if (file_exists($thumbpath)) $path = str_replace($this->_dir_data, "", $thumbpath);
			}
			if (!$path) $path = "/" . $defimg;
			return $this->_url_data . $path;
		}

		/**
		* 성공메세지를 반환한다.
		* @param string $success 성공코드
		* @param string $lang 언어
		* @return strong 성공메세지
		* @version 1.0.0
		**/
		function success($success, $lang='kor')
		{
			$success_path = $this->_dir_lib . "/message/inc.success_message.{$lang}.php";
			if (file_exists($success_path))
			{
				include $success_path;
				if (array_key_exists($success, $g_success_messages))
				{
					$success = $g_success_messages[$success];
				}
			}
			return $success;
		}

		/**
		* 변수에 관한 정보를 사람이 읽기 좋게 출력합니다
		* @param mixed $expression
		* @param boolean $is_exit TRUE이면 실행후 종료
		* @version 1.0.0
		* @see PrintR::print_r()
		**/
		function v($expression, $is_exit=true)
		{
			$this->class_require('PrintR');
			$Print = new PrintR();
			$Print->print_r2($expression);
			if ($is_exit) exit;
		}

		/**
		* Error Handler
		* @param string $errno 에러번호
		* @param string $errstr 에러문
		* @param string $errfile 에러파일
		* @param string $errline 에러라인
		* @version 1.0.0
		**/
		function _error_handler($errno, $errstr, $errfile, $errline)
		{
			echo "
			<style>
			<!--
			div, font{ font-family: '', 'u'; font-size: 12px; line-height: 15px; color: '#000000'}
			div.error {text-align: left;}
			font.red {color: red;}
			font.blue {color: blue;}
			font.green {color:green;}
			//-->
			</style>";
			echo "<div class='error'>";
			switch ($errno)
			{
				case E_USER_ERROR:
					echo "<font class='red'><b>USER_ERROR</b> [$errno] $errstr</font><br>";
					echo "<font class='blue'>Fatal error in line $errline of file $errfile</font>";
					//echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
					break;
				case E_USER_WARNING:
					echo "<font class='red'><b>USER_WARNING</b> [$errno] $errstr</font><br>";
					break;
				case E_USER_NOTICE:
					echo "<font class='red'><b>USER_NOTICE</b> [$errno] $errstr</font><br>";
					break;
				default:
					echo "<font class='red'>Unkown error type: [$errno] $errstr</font><br>";
					echo "<font class='blue'>Fatal error in line $errline of file $errfile</font>";
					break;
			}
			echo "</div>";
		}


		/*
		* SMS 보내기
		* @param string $message 메시지
		* @param string $to_hp		받는사람 핸드폰 번호
		* @param string $to_name 받는사람
		* @param string $from_hp	 보내는 사람 번호
		* @param string $from_name 보내는 사람
		*/
		function send_sms($message, $to_hp,$to_name, $from_hp, $from_name)
		{
			global $Script;
			$Script->alert($message);
			// SMS 처리
			$sms = array(
				'msg'			=>$message,
				'to_hp'			=>$to_hp,
				'to_name'		=>$to_name,
				'from_hp'		=>$from_hp,
				'from_name'	=>$from_name,
			);

			return true;
		}

		/*
		* 메일한건 보내기
		* @param string $subject	타이틀
		* @param string $to_eml	받는사람 이메일
		* @param string $msg		메시지
		*/
		function send_one_mail( $subject, $to_eml, $msg)
		{
			global $App, $Db;
			$App->class_require('SmtpMail');
			$App->class_require('Table.EmailContent');
			$SMTPMAIL = new SmtpMail();
			$EmailContent  = new EmailContent(&$Db);

			$SMTPMAIL->to = $to_eml;
			$SMTPMAIL->smtp_host =$App->_smtp_host;
			$SMTPMAIL->from = $App->_admin_email;
			$SMTPMAIL->subject = $subject;
			$SMTPMAIL->body =  $msg;

			if(!$SMTPMAIL->send())
			{
				echo $SMTPMAIL->ERROR_MSG;
				return false;

			} return true;
		}

		/** Getter **/
		function get_error_page() { return $this->_error_page; }

		/** Setter **/
		function set_error_page($page) { $this->_error_page = $page; }
		function set_error_frame($fr) { $this->_error_frame = $fr; }
		function is_debug() { return $this->_debug; }
		function is_send_process_mail() { return $this->_send_process_mail; }
		function is_send_process_sms() { return $this->_send_process_sms; }
	}
}
?>